Pular para o conteúdo principal

Referência da API

BtgPayClient​

class BtgPayClient(context: Context)

Métodos​

MétodoAssinaturaDescrição
connectfun connect(listener: ConnectionListener)Conecta ao serviço BTG Pay
disconnectfun disconnect()Desconecta do serviço, cancelando operações em andamento
isCommissionedfun isCommissioned(): BooleanRetorna se o terminal está comissionado
startCommissioningfun startCommissioning(cnpj: String, activationCode: String, listener: CommissioningListener)Inicia o comissionamento do terminal
cancelWorkflowfun cancelWorkflow()Cancela o fluxo em andamento sem desconectar do serviço. Também chamado internamente por disconnect()

Propriedades​

PropriedadeTipoDescrição
isConnectedBooleantrue quando conectado ao serviço
sdkVersionString?Versão do SDK
sdkBuildIdString?Identificador do build
printerPrinterApiSubsistema de impressão

ConnectionListener​

interface ConnectionListener {
fun onConnected()
fun onDisconnected()
fun onBindFailed()
fun onInitFailed(reason: String)
}
CallbackQuando é chamado
onConnectedConexão estabelecida com o serviço
onDisconnectedO processo do serviço morreu; o Android tentará reconectar automaticamente
onBindFailedO serviço não está instalado no terminal
onInitFailedFalha na inicialização do serviço; o binding é desfeito automaticamente

Comportamento de connect:

  • Se o client já está conectado, onConnected é invocado imediatamente.
  • Se já está em processo de conexão, o novo listener substitui o anterior e a conexão em andamento é reaproveitada.
  • Após onDisconnected, o Android mantém o binding ativo — onConnected será chamado novamente quando o serviço voltar.

CommissioningListener​

interface CommissioningListener {
fun onSuccess()
fun onError(message: String)
}
CallbackQuando é chamado
onSuccessComissionamento concluído
onErrorFalha no comissionamento; message descreve o motivo

Os callbacks são invocados na Binder thread. Operações de UI devem ser despachadas para a main thread.

PrinterApi​

interface PrinterApi {
suspend fun print(build: PrintJobScope.() -> Unit): Result<Unit>
suspend fun print(job: PrintJob): Result<Unit>
suspend fun setReceiptTemplate(svg: String): Result<Unit>
fun clearReceiptTemplate()
suspend fun status(): PrinterStatus
}
MétodoDescrição
print(build)Constrói e imprime um job em uma chamada
print(job)Imprime um PrintJob construído previamente
setReceiptTemplate(svg)Instala um template SVG de comprovante (validado imediatamente)
clearReceiptTemplate()Remove o template customizado, revertendo ao modelo do BTG
status()Consulta o estado da impressora

Funções top-level​

printJob​

fun printJob(build: PrintJobScope.() -> Unit): PrintJob

Constrói um PrintJob imutável e reutilizável. Útil para imprimir o mesmo conteúdo mais de uma vez (ex.: segunda via). Ver Reutilizar um job.

PrintJobScope​

fun text(
text: String,
size: Int = 16,
align: Align = Align.LEFT,
bold: Boolean = false,
marginLeft: Int = 0,
marginRight: Int = 0,
lineSpace: Int = 0,
)

fun image(
png: ByteArray,
align: Align = Align.CENTER,
marginLeft: Int = 0,
marginRight: Int = 0,
)

fun qr(content: String, align: Align = Align.CENTER, size: Int = 240)

fun feed(lines: Int = 1)

Tipos​

Align​

enum class Align { LEFT, CENTER, RIGHT }

PrinterStatus​

sealed interface PrinterStatus {
data object Ready : PrinterStatus
data object NoPaper : PrinterStatus
data object Overheated : PrinterStatus
data object Unavailable : PrinterStatus
}

PrintJob​

data class PrintJob(val elements: List<PrintElement>)

PrintElement​

sealed interface PrintElement {
data class Text(
val text: String,
val size: Int,
val align: Align,
val bold: Boolean,
val marginLeft: Int,
val marginRight: Int,
val lineSpace: Int,
) : PrintElement

data class Image(
val png: ByteArray,
val align: Align,
val marginLeft: Int,
val marginRight: Int,
) : PrintElement

data class Qr(val content: String, val align: Align, val size: Int) : PrintElement

data class Feed(val lines: Int) : PrintElement
}

PrintException​

class PrintException(
val brn: String,
val severity: String,
override val message: String,
val details: String? = null,
val failedElementIndex: Int? = null,
) : Exception(message)

Códigos de erro — Impressão​

Hardware e estado​

brnSignificado
brn:btg:pay:hal:printer:out-of-paperSem papel
brn:btg:pay:hal:printer:overheatingCabeça superaquecida
brn:btg:pay:hal:printer:hardware-failureFalha de hardware
brn:btg:pay:hal:printer:printer-timeoutA impressora não respondeu

Job recusado​

brnSignificado
brn:btg:pay:hal:printer:empty-jobNenhum elemento no job
brn:btg:pay:hal:printer:too-many-elementsAcima de 32 elementos
brn:btg:pay:hal:printer:image-too-largeImagem acima de 512 KB
brn:btg:pay:hal:printer:text-too-longTexto acima de 4.096 caracteres
brn:btg:pay:hal:printer:payload-too-largeJob somando mais de 768 KB
brn:btg:pay:hal:printer:qr-render-failedConteúdo longo demais ou size pequeno demais
brn:btg:pay:hal:printer:malformed-jobJob inválido na travessia AIDL

Concorrência e disponibilidade​

brnSignificado
brn:btg:pay:hal:printer:printer-busyOutro job em andamento
brn:btg:pay:hal:printer:printer-unavailableSem impressora no terminal
brn:btg:pay:hal:printer:job-timed-outO job passou do tempo máximo
brn:btg:pay:hal:printer:timeoutO serviço não respondeu
brn:btg:pay:hal:printer:transport-failureFalha na chamada ao serviço

Campos do template de comprovante​

CampoConteúdoExemplo
{{merchant_name}}Nome do estabelecimentoMERCADO SILVA
{{cnpj}}CNPJ formatado30.306.294/0001-45
{{date}}Data da transação29/09/2026
{{time}}Hora da transação19:30
{{via_label}}Qual viaVIA DO CLIENTE
{{payment_method}}Meio de pagamentoCREDITO
{{amount}}Valor totalR$ 50,00
{{installments_label}}Rótulo de parcelamento3X SEM JUROS DE
{{installment_amount}}Valor da parcelaR$ 16,67
{{qr_url}}URL do QR como textohttps://nf.e/abc
{{qr}}QR desenhado na origemPosicionar com <g transform>

Erros de validação do template​

ErroCausa
template is N bytes, over the 262144 byte limitTemplate acima de 256 KB
external reference is not allowed, only data: URIs: Xhref para arquivo ou URL
unknown placeholder: {{X}}Nome fora da tabela de campos
unterminated placeholder: missing }}Faltou fechar }}
unterminated attribute valueAtributo com aspas não fechadas
template does not rasterize: XSVG inválido

Limites​

LimiteValor
Largura do papel384 px
Elementos por job32
Caracteres por texto4.096
Bytes por imagem512 KB
Bytes por job (soma)768 KB
Bytes do template256 KB (262.144)
Timeout de print90 s
Timeout de setReceiptTemplate15 s
Timeout de status5 s